SVM বা Support Vector Machine হল একটি জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা মূলত ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যা সমাধানের জন্য ব্যবহৃত হয়। এটি ক্লাসিফিকেশন সমস্যায় ইনপুট ডেটাকে বিভিন্ন শ্রেণীতে ভাগ করার জন্য একটি সীমানা (decision boundary) তৈরি করে। Linear SVM এবং Non-linear SVM হলো এই অ্যালগরিদমের দুটি ভিন্ন ধরনের বাস্তবায়ন, যা ডেটার প্রকৃতির উপর নির্ভর করে।
Linear SVM
Linear SVM হলো একটি ক্লাসিফিকেশন অ্যালগরিদম যা সরল, সোজা একটি সীমান্ত বা হাইপারপ্লেন ব্যবহার করে ডেটাকে দুটি শ্রেণিতে বিভক্ত করে। এটি কেবলমাত্র সেই সমস্ত ডেটাসেটের জন্য উপযোগী যেখানে ডেটা লিনিয়ারভাবে আলাদা (linearly separable) করা যায়। অর্থাৎ, দুটি শ্রেণীকে সরল একটি সোজা রেখা বা সমতল দ্বারা আলাদা করা যায়।
প্রক্রিয়া:
Linear SVM-এ, সেরা হাইপারপ্লেন (decision boundary) নির্বাচন করা হয় যা দুটি শ্রেণীর মধ্যে সর্বাধিক মার্জিন তৈরি করে, অর্থাৎ যে হাইপারপ্লেনটি দুটি শ্রেণীকে সর্বোচ্চ দূরত্বে আলাদা করে।
মডেলের লক্ষ্য:
Linear SVM দুটি শ্রেণীকে বিভক্ত করতে এমন একটি হাইপারপ্লেন খুঁজে বের করা যা দুটি শ্রেণীর মধ্যে সর্বাধিক মার্জিন তৈরি করে।
ম্যাথমেটিক্যাল মডেল:
এখানে,
- w: হাইপারপ্লেনের normal vector
- x: ডেটা পয়েন্ট
- b: বাইয়াস (bias term)
Linear SVM এর উদাহরণ:
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# ডেটা তৈরি করা
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_clusters_per_class=1, random_state=42)
# ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Linear SVM মডেল তৈরি করা
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# পূর্বাভাস
y_pred = model.predict(X_test)
Non-linear SVM
Non-linear SVM ব্যবহার করা হয় যখন ডেটা linearly separable (অর্থাৎ, সরল একটি সীমানা দ্বারা আলাদা করা যায় না) না হয়। এই ক্ষেত্রে, SVM ডেটাকে একটি higher-dimensional space-এ ম্যাপ করতে সাহায্য করে যেখানে ডেটা লিনিয়ারভাবে আলাদা করা যেতে পারে। এটি kernel trick ব্যবহার করে করা হয়।
Kernel Trick:
Kernel function একটি ম্য্যাথমেটিক্যাল ফাংশন যা ডেটাকে একটি উচ্চতর মাত্রায় ম্যাপ করে। SVM এই kernel function ব্যবহার করে higher-dimensional space-এ ডেটার মধ্যে সম্পর্ক শিখে।
প্রধান kernel functions:
- Linear Kernel: সাধারণ লিনিয়ার ডেটার জন্য।
- Polynomial Kernel: পলিনোমিয়াল ডেটার জন্য।
- RBF (Radial Basis Function) Kernel: গড়ে ওঠা ডেটার জন্য, বিশেষ করে যেখানে ডেটা সোজা রেখা দ্বারা বিভক্ত করা যায় না।
- Sigmoid Kernel: নিউরাল নেটওয়ার্কের মতো আচরণ করে।
Non-linear SVM এর উদাহরণ:
from sklearn.svm import SVC
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
# Non-linear ডেটাসেট তৈরি করা
X, y = make_moons(n_samples=100, noise=0.2, random_state=42)
# ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Non-linear SVM (RBF kernel) মডেল তৈরি করা
model = SVC(kernel='rbf')
model.fit(X_train, y_train)
# পূর্বাভাস
y_pred = model.predict(X_test)
Linear vs Non-linear SVM:
| বৈশিষ্ট্য | Linear SVM | Non-linear SVM |
|---|---|---|
| ডেটা আকার | লিনিয়ারভাবে আলাদা করা যায় এমন ডেটা | লিনিয়ারভাবে আলাদা না করা যায় এমন ডেটা |
| ক্লাসিফিকেশন বাউন্ডারি | সরল একটি হাইপারপ্লেন (সোজা রেখা বা সমতল) | উচ্চ মাত্রার স্পেসে ম্যাপ করা এবং সেখান থেকে সিদ্ধান্ত নেওয়া |
| Kernel function | Kernel ফাংশন ব্যবহৃত হয় না | Kernel trick (RBF, Polynomial, Sigmoid ইত্যাদি) ব্যবহার করা হয় |
| প্যারামিটার | শুধুমাত্র হাইপারপ্লেনের জন্য সোজা প্যারামিটার | Kernel ফাংশন এবং তার প্যারামিটার নিয়ে কাজ করতে হয় |
| ব্যবহার | সাধারণত সহজ এবং কম্পিউটেশনে দ্রুত | জটিল এবং বিভিন্ন ক্ষেত্রে ব্যবহারযোগ্য |
সারাংশ
- Linear SVM একটি সরল সীমান্ত (hyperplane) ব্যবহার করে ডেটাকে দুটি শ্রেণিতে বিভক্ত করে। এটি কেবল তখনই কার্যকরী, যখন ডেটা লিনিয়ারভাবে আলাদা করা যায়।
- Non-linear SVM ডেটাকে একটি উচ্চমাত্রার স্পেসে ম্যাপ করার জন্য kernel trick ব্যবহার করে, যেখানে ডেটা লিনিয়ারভাবে আলাদা করা যেতে পারে। এটি তখন ব্যবহার করা হয় যখন ডেটা সরল একটি সীমানা দ্বারা আলাদা করা সম্ভব নয়।
Read more